#include<Windows.h>
#include<string>
#include<time.h>
#include<cassert>//assert();
#include<easyx.h>
#include<conio.h>//_getch();
#include<mmsystem.h>
#pragma comment(lib,"Winmm.lib")//mciSendString();
//中文路径去项目-》属性里更改 字符集为多字节
//以30帧为例-----------------BadAppleTXT是30帧的-------------------BadAppleTXT60FPS是60帧的
int k, sumP = 6577;//13154;
std::string PATH = "D:\\gcc\\C语言专用\\BadApple\\Debug\\BadAppleTXT\\ASCII-BADAPPLE (";//绝对路径（我的路径有点长 ——_——！）
char buf[1000];//缓冲buffer
clock_t st, nt;

void drawGragh(double progBar) {//传入当前播放进度百分比
	FILE *fp;
	int sx = 1, sy = 1;//起始位置

	if ((fp = fopen(PATH.c_str(), "r")) != NULL) {//打开文件 - 只读
		BeginBatchDraw();//批量绘图
		while (fgets(buf, 1000, fp) != NULL) {
			outtextxy(sx, sy, buf);
			sy += 7;//下移距离与字体大小对应
		}
		solidrectangle(0.0, 289.0, 605 * progBar, 294.0);
		/*显示帧数*/
		settextstyle(14, 0, _T("黑体"));//字体样式
		outtextxy(590, 280, std::to_string((k - 1)*1.0 / ((nt-st)/CLOCKS_PER_SEC)).c_str());
		settextstyle(7, 0, _T("黑体"));//字体样式

		EndBatchDraw();//结束批量绘图
		fclose(fp);//关闭文件
	}
	else assert(NULL);//异常终止
}
void FrameController(int page) {
	nt = clock();//当前时间
	double total = (double)(nt - st) / CLOCKS_PER_SEC;
	while (page*1.0/total >= 30) {//帧数太快适当延迟 -- 30帧
		nt = clock();//当前时间
		total = (double)(nt - st) / CLOCKS_PER_SEC;
	}
}

int main(){
	// easyx 绘图窗口初始化
	initgraph(605,295);//自定义即可, 具体与txt文件的行列有关
    /*字体设置*/
	LOGFONT f;
	gettextstyle(&f);//获得当前字体信息
	f.lfHeight = 7;//设置字高
	f.lfQuality = ANTIALIASED_QUALITY;//抗锯齿
	settextstyle(f.lfHeight, 0, _T("黑体"));//字体样式

	mciSendString("open D:\\gcc\\C语言专用\\BadApple\\Debug\\BadAppleMusic\\BKMusic.mp3 alias bkmusic", NULL, 0, NULL);//背景音乐
	mciSendString("play bkmusic repeat", NULL, 0, NULL);

	st = clock();//起始时间
	for (k = 1; k <= sumP; k++) {//总共sumP个txt文件
		PATH = "D:\\gcc\\C语言专用\\BadApple\\Debug\\BadAppleTXT60FPS\\ASCII-BADAPPLE1 ("
		+ std::to_string(k) + ").txt";
		drawGragh((k*1.0) / (sumP*1.0));//逐帧绘制	
		FrameController(k);
		cleardevice();
	}
	mciSendString("close bkmusic", NULL, 0, NULL);
	_getch();//等待
	closegraph();
	return 0;
}